home *** CD-ROM | disk | FTP | other *** search
/ PC-SIG: World of Games / PC-SIG World of Games (CDRM1080710) (1993).iso / SWMAG / DISK1533.ZIP / CMDLINE.C next >
Text File  |  1988-01-08  |  1KB  |  68 lines

  1. #include <errno.h>
  2. #include <string.h>
  3. #include <dos.h>
  4.  
  5. int    optind    = 1;    /* index of which argument is next    */
  6. char   *optarg;        /* pointer to argument of current option */
  7. int    opterr    = 1;    /* allow error message    */
  8. int    badopt    = 0;    /* allow the function to pass the bad arg */
  9.  
  10. static    char   *letP = NULL;    /* remember next option char's location */
  11. static    char    SW = 0;        /* DOS switch character, either '-' or '/' */
  12.  
  13.  
  14. int    getopt(int argc, char *argv[], char *optionS)
  15. {
  16.     unsigned char ch;
  17.     char *optP;
  18.  
  19.     if (SW == 0) {
  20.         /* get SW using dos call 0x37 */
  21.         _AX = 0x3700;
  22.         geninterrupt(0x21);
  23.         SW = _DL;
  24.     }
  25.  
  26.     if (argc > optind) {
  27.         if (letP == NULL) {
  28.             if ((letP = argv[optind]) == NULL || 
  29.                 *(letP++) != SW)  goto gopEOF;
  30.             if (*letP == SW) {
  31.                 optind++;  goto gopEOF;
  32.             }
  33.         }
  34.         if (0 == (ch = *(letP++))) {
  35.             optind++;  goto gopEOF;
  36.         }
  37.         if (':' == ch  ||  (optP = strchr(optionS, ch)) == NULL)  
  38.             goto gopError;
  39.         if (':' == *(++optP)) {
  40.             optind++;
  41.             if (0 == *letP) {
  42.                 if (argc <= optind)  goto  gopError;
  43.                 letP = argv[optind++];
  44.             }
  45.             optarg = letP;
  46.             letP = NULL;
  47.         } else {
  48.             if (0 == *letP) {
  49.                 optind++;
  50.                 letP = NULL;
  51.             }
  52.             optarg = NULL;
  53.         }
  54.         return ch;
  55.     }
  56. gopEOF:
  57.     optarg = letP = NULL;
  58.     return EOF;
  59.  
  60. gopError:
  61.     optarg = NULL;
  62.     errno  = EINVAL;
  63.     if (opterr)
  64.         perror ("get command line option");
  65.     badopt = ch;
  66.     return ('?');
  67. }
  68.